﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ecommerce.Model
{
    public class RevendaModel : BaseData
    {

        private static RevendaModel instance;

        private RevendaModel()
        {

        }

        public static RevendaModel Instance
        {
            get
            {
                if (instance == null)
                    instance = new RevendaModel();
                
                return instance;
            }
        }

        public void Inserir(tb_pes_pessoa revenda)
        {
            using (EcommerceEntities db = new EcommerceEntities(this.InicializarStringConexao(), false))
            {
                db.tb_pes_pessoa.Add(revenda);
                
                try
                {
                    db.SaveChanges();
                }
                catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                {
                    string a = ex.Message;
                    throw ex;
                }
                
            }
        }

        public void Editar(tb_pes_pessoa revenda)
        {
            using (EcommerceEntities db = new EcommerceEntities(this.InicializarStringConexao(), false))
            {
                db.tb_pes_pessoa.Attach(revenda);
                db.tb_pju_pessoa_juridica.Attach(revenda.tb_pju_pessoa_juridica);
                db.tb_rev_revenda.Attach(revenda.tb_pju_pessoa_juridica.tb_rev_revenda);

                db.Entry(revenda).State = System.Data.EntityState.Modified;
                db.Entry(revenda.tb_pju_pessoa_juridica).State = System.Data.EntityState.Modified;
                db.Entry(revenda.tb_pju_pessoa_juridica.tb_rev_revenda).State = System.Data.EntityState.Modified;

                db.SaveChanges();
            }
        }

        public List<tb_rev_revenda> Listar()
        {
            List<tb_rev_revenda> revendas = new List<tb_rev_revenda>();
            using (var db = new EcommerceEntities(this.InicializarStringConexao(), false))
            {
                var q = (
                        from
                            rev
                        in
                            db.tb_rev_revenda
                        join
                            pju
                        in
                            db.tb_pju_pessoa_juridica
                        on
                            rev.rev_idt_revenda equals pju.pju_idt_pessoa_juridica
                        join
                            pes
                        in
                            db.tb_pes_pessoa
                        on
                            pju.pju_idt_pessoa_juridica equals pes.pes_idt_pessoa
                        select new { tb_rev_revenda = rev, tb_pju_pessoa_juridica = pju, tb_pes_pessoa = pes }).ToList();

                foreach (var item in q)
                {
                    tb_rev_revenda rev = item.tb_rev_revenda;
                    rev.tb_pju_pessoa_juridica = item.tb_pju_pessoa_juridica;
                    rev.tb_pju_pessoa_juridica.tb_pes_pessoa = item.tb_pes_pessoa;
                    item.tb_rev_revenda.tb_pju_pessoa_juridica = item.tb_pju_pessoa_juridica;

                    revendas.Add(rev);
                }
                    
            }
            return revendas;
        }

        public tb_pes_pessoa Obter(int identificador)
        {
            tb_pes_pessoa pessoa;

            using (EcommerceEntities db = new EcommerceEntities(this.InicializarStringConexao(), false))
            {
                pessoa = db.tb_pes_pessoa.Include("tb_pju_pessoa_juridica").Where(x => x.pes_idt_pessoa == identificador).FirstOrDefault();
                pessoa.tb_pju_pessoa_juridica.tb_rev_revenda = db.tb_rev_revenda.Where(x => x.rev_idt_revenda == identificador).FirstOrDefault();
            }
            return pessoa;
        }
    }
}
